home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / shortkey.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  5KB  |  207 lines

  1. /*
  2.  * ShortKeys.c
  3.  *
  4.  * S'occupe de g‚rer les raccourcis claviers
  5.  *
  6.  * 20.11.94: Created
  7.  */
  8.  
  9.      #include "!OPTIONS.H"                /* Options de compilation */         
  10.     #define    THIS_FILE    "SHORTKEY.C v1.00 - 03.95"
  11.  
  12. /*
  13.  * System headers:
  14.  */
  15.     #include    <stdio.h>
  16.     #include <string.h>
  17.     #include <aes.h>
  18.           
  19. /*
  20.  * Custom headers:
  21.  */
  22.     #include "SPEC_PU.H"
  23.     #include "WIN_PU.H"
  24.  
  25.     #include    "DEBUG_PU.H"    
  26.     #include "SHORT_PU.H"    
  27.  
  28. /*
  29.  * ------------------------ CONSTANTS -------------------------
  30.  */
  31.  
  32. #define    NB_CTRL_SHORTCUTS        20
  33. #define    NB_ALT_SHORTCUTS        20
  34.  
  35. /*
  36.  * ------------------------ STRUCTURES -------------------------
  37.  */
  38. typedef
  39.     struct
  40.     {
  41.         char    c_KeyCode;
  42.         char    c_EqTitle;
  43.         char    c_EqEntry;
  44.     }
  45.     SHORTKEY;
  46.  
  47. /*
  48.  * ------------------------ PROTOTYPES -------------------------
  49.  */
  50.  
  51. /*
  52.  * EXTernal prototypes:
  53.  */
  54.     static    void    maptree( OBJECT *tree, int this, int last, int (*routine)( OBJECT *tree, int tmp1 ) );
  55.  
  56.  
  57. /*
  58.  * PRIVate INTernal prototypes:
  59.  */
  60.  
  61.     static    int    ExtractShortKey(             /* Out: TRUE */
  62.                             OBJECT *    pObj_Tree,     /* In: Arbre ds lequel on se trouve */
  63.                             int        n_Obj );        /* In: No de l'objet … examiner */
  64.  
  65.  
  66. /*
  67.  * ---------------------------- VARIABLES -------------------------------
  68.  */
  69.  
  70. /*
  71.  * Variables internes priv‚es:
  72.  */
  73.     /* 
  74.      * Tables de raccourcis claviers:
  75.      */
  76.     static    SHORTKEY    M_TShort_CtrlMap[ NB_CTRL_SHORTCUTS ];
  77.     static    SHORTKEY    M_TShort_AltMap[ NB_ALT_SHORTCUTS ];
  78.     /*
  79.      * Nbre de raccourcis claviers pour menu ppal:
  80.      */
  81.     static    int    M_nb_CtrlShorts = 0;
  82.     static    int    M_nb_AltShorts = 0;
  83.     /* 
  84.      * Compteur du titre de menu correspondant … l'entr‚e courament visit‚e:
  85.      */
  86.     static    int    M_n_CurrentTitle = 1;
  87.  
  88. /*
  89.  * ---------------------------- METHODES -------------------------------
  90.  */
  91.  
  92. /*
  93.  * Create_KeyMap(-)
  94.  *
  95.  * Cr‚e table de raccourcis calviers en parcourant le menu
  96.  *
  97.  * 20.11.94: fplanque: created
  98.  */
  99. void    Create_KeyMap(
  100.             OBJECT    *    pObj_Menu )    /* In: Arbre Menu … analyser */
  101. {
  102.     maptree( pObj_Menu, ROOT, NIL, ExtractShortKey );
  103. }
  104.  
  105.  
  106.  
  107. /*
  108.  * ExtractShortKey(-)
  109.  * 
  110.  * Extrait le raccourci clavier qui correspond … une entr‚e de menu
  111.  * et le suave ds un tableau
  112.  *
  113.  * 20.11.94: fplanque: Created
  114.  */
  115. int    ExtractShortKey(             /* Out: TRUE */
  116.             OBJECT *    pObj_Tree,     /* In: Arbre ds lequel on se trouve */
  117.             int        n_Obj )        /* In: No de l'objet … examiner */
  118. {
  119.     if( M_nb_CtrlShorts >= NB_CTRL_SHORTCUTS || M_nb_AltShorts >= NB_ALT_SHORTCUTS )
  120.     {
  121.         signale( "Short Key Map Full!" );
  122.         return FALSE0;        /* Je ne suis pas bien sur de l'utilisation de FALSE ici */
  123.     }
  124.     
  125.     if( pObj_Tree[ n_Obj ] .ob_type == G_BOX )
  126.     {
  127.         M_n_CurrentTitle ++;        
  128.     }
  129.     else if( pObj_Tree[ n_Obj ] .ob_type == G_STRING )
  130.     {
  131.         char * psz_entry     = pObj_Tree[ n_Obj ] .ob_spec.free_string;
  132.         size_t size_entry = strlen( psz_entry );
  133.  
  134.         switch( psz_entry[ size_entry - 3 ] )
  135.         {
  136.             case    '^':
  137.                 M_TShort_CtrlMap[ M_nb_CtrlShorts ] .c_KeyCode = psz_entry[ size_entry - 2 ];
  138.                 M_TShort_CtrlMap[ M_nb_CtrlShorts ] .c_EqTitle = M_n_CurrentTitle;
  139.                 M_TShort_CtrlMap[ M_nb_CtrlShorts++ ] .c_EqEntry = n_Obj;
  140.                 break;
  141.                         
  142.             case    ALT_SIGN:
  143.                 M_TShort_AltMap[ M_nb_AltShorts ] .c_KeyCode = psz_entry[ size_entry - 2 ];
  144.                 M_TShort_AltMap[ M_nb_AltShorts ] .c_EqTitle = M_n_CurrentTitle;
  145.                 M_TShort_AltMap[ M_nb_AltShorts++ ] .c_EqEntry = n_Obj;
  146.                 break;
  147.         }
  148.     }
  149.  
  150.     return    TRUE_1;
  151. }
  152.  
  153.  
  154. /*
  155.  * Lookup_Shortkey(-)
  156.  *
  157.  * Trouve l'ent‚e de menu associ‚e … un raccourci clavier
  158.  *
  159.  * 22.11.94: fplanque: Created
  160.  */
  161. int    Lookup_Shortkey(            /* Out: no de l'entr‚e menu ‚quivalente; NIL si pas trouv‚ */
  162.             int    n_kbd_state,     /* In:  Etat du clavier lors de l'appui de touche */
  163.             int    n_ScanCode,     /* In:  Scancode de la touche press‚e */
  164.             char    c_car,            /* In:  Code ascii de la touche */
  165.             int *    pn_Title )        /* Out: Idx du titre de menu concern‚ */
  166. {
  167.     int    n;
  168.  
  169.     FAKE_USE( n_ScanCode );
  170.     *pn_Title = NIL_1;
  171.  
  172.     /*
  173.      * Raccourcis avec touche control:
  174.      */
  175.     if( n_kbd_state & K_CTRL )
  176.     {
  177.         for( n=0; n<M_nb_CtrlShorts; n++ )
  178.         {
  179.             if( M_TShort_CtrlMap[ n ] .c_KeyCode == c_car )
  180.             {
  181.                 *pn_Title = M_TShort_CtrlMap[ n ] .c_EqTitle;
  182.                 return    M_TShort_CtrlMap[ n ] .c_EqEntry;
  183.             }
  184.         }
  185.         return    NIL_1;
  186.     }
  187.  
  188.     /*
  189.      * Raccourcis avec touche Alternate:
  190.      */
  191.     if( n_kbd_state & K_ALT )
  192.     {
  193.         for( n=0; n<M_nb_AltShorts; n++ )
  194.         {
  195.             if( M_TShort_AltMap[ n ] .c_KeyCode == c_car )
  196.             {
  197.                 *pn_Title = M_TShort_AltMap[ n ] .c_EqTitle;
  198.                 return    M_TShort_AltMap[ n ] .c_EqEntry;
  199.             }
  200.         }
  201.         return    NIL_1;
  202.     }
  203.  
  204.     
  205.     return    NIL_1;
  206. }
  207.